

#include "vipaccount.h"
#include "device.h"


// 创建普通账户节点
user_t *createDoubleCircularLinkedList_ANnode(char *In_AccountNumber, char *In_Password,int accountgrade)
{
    user_t *xnew = calloc(1, sizeof(user_t));
    if (xnew == NULL)
    {
        perror("Alloc Space failed!\n");
        return false;
    }
    strcpy(xnew->In_AccountNumber, In_AccountNumber);
    strcpy(xnew->In_Password, In_Password);
    xnew->accountflag=0;
    xnew->accountgrade=accountgrade;
    xnew->prev = NULL;
    xnew->next = NULL;
    return xnew;
}

// 创建普通账户管理者
manager_user_t *createDoubleCircularLinkedList_ANmanager()
{
    manager_user_t *ANmanager = calloc(1, sizeof(manager_user_t));
    if (ANmanager == NULL)
    {
        perror("Alloc Space failed!\n");
        return false;
    }
    ANmanager->num1 = 0;
    ANmanager->head = NULL;
    ANmanager->tail = NULL;
}

// 插入节点(创建普通账户存入链表中)
// bool InsertDoubleCircularLinkedList_ANnode(manager_user_t *ANmanager, char *In_AccountNumber, char *In_Password)
// {
//     user_t *xnew = createDoubleCircularLinkedList_ANnode(In_AccountNumber, In_Password);
//     if ((strlen(In_AccountNumber) >= 5 && strlen(In_AccountNumber) <= 8) && (strlen(In_Password) >= 5 && strlen(In_Password) <= 8))
//     {
//         if (ANmanager->head == NULL)
//         {
//             ANmanager->head = xnew;
//             ANmanager->tail = xnew;
//         }
//         else
//         {
//             ANmanager->tail->next = xnew;
//             xnew->prev = ANmanager->tail;
//             ANmanager->tail = xnew;
//         }
//         ANmanager->num1++;
//         xnew->accountflag=ANmanager->num1;
//         return true;
//     }
//     else
//     {
//         return false;
//     }
// }

//插入账户节点
bool InsertDoubleCircularLinkedList_ANnode(manager_user_t *ANmanager, char *In_AccountNumber, char *In_Password,int accountgrade) {
    // 1. 参数检查
    if (!ANmanager || !In_AccountNumber || !In_Password) {
        printf("Error: Invalid parameters!\n");
        return false;
    }

    // 2. 先验证长度再创建节点
    size_t acc_len = strlen(In_AccountNumber);
    size_t pwd_len = strlen(In_Password);
    if (acc_len < 5 || acc_len > 8 || pwd_len < 5 || pwd_len > 8) {
        printf("Error: Account/Password length invalid!\n");
        return false;
    }

    // 3. 创建新节点
    user_t *xnew = createDoubleCircularLinkedList_ANnode(In_AccountNumber, In_Password, accountgrade);
    if (!xnew) {
        printf("Error: Failed to create account node!\n");
        return false;
    }

    // 4. 插入节点
    if (ANmanager->head == NULL) {
        ANmanager->head = ANmanager->tail = xnew;
        xnew->next = xnew->prev = xnew; // 环形自引用
    } else {
        xnew->prev = ANmanager->tail;
        xnew->next = ANmanager->head;  // 闭环
        ANmanager->tail->next = xnew;
        ANmanager->head->prev = xnew;   // 更新头节点的prev
        ANmanager->tail = xnew;
    }

    ANmanager->num1++;
    xnew->accountflag = ANmanager->num1;
    return true;
}

// // 删除节点(注销普通账号)
// bool DeleteDoubleCircularLinked_ANnode(manager_user_t *ANmanager, char *In_AccountNumber, char *In_Password)
// {
//     user_t *p = ANmanager->head;
//     if (ANmanager->head == NULL)
//     {
//         return false;
//     }
//     else
//     {
//         while (p)
//         {
//             if (p->In_AccountNumber == In_AccountNumber && p->In_Password == In_Password)
//             {
//                 p->prev->next = p->next;
//                 p->next->prev = p->prev;
//                 p->next = NULL;
//                 p->prev = NULL;
//                 free(p);
//             }
//             p = p->next;
//         }
//     }
//     ANmanager->num1--;
//     return true;
// }

// // 登录
// priorty_t on_login_handler(manager_user_t *ANmanager, char *In_AccountNumber, char *In_Password)
// {
//     user_t *p = ANmanager->head; // 用于遍历账号节点

//     while (p)
//     {
//         // 普通账号(权限低)
//         if (strcmp(In_AccountNumber, p->In_AccountNumber) == 0 && strcmp(In_Password, p->In_Password) == 0)
//         {
//             printf("正在登录...\n");
//             printf("登录成功！\n");
//             printf("当前是普通用户账号！\n");
//             return ;
//         }
//         p = p->next;
//     }
//     return 0;
// }

// // 注册
// bool on_logon_handler(manager_user_t *ANmanager, char *In_AccountNumber, char *In_Password)
// {

//     printf("请设置您的账号(由5~8为字母或数字组成):\n");
//     scanf("%s", In_AccountNumber);
//     printf("请设置您的密码(由5~8字母或数据组成):\n");
//     scanf("%s", In_Password);
//     if (InsertDoubleCircularLinkedList_ANnode(ANmanager, In_AccountNumber, In_Password))
//     {
//         printf("注册成功!\n");
//         return true;
//     }
//     else
//     {
//         printf("账号或密码未按要求设置,请重新设置!\n");
//         return false;
//     }
// }

